package com.company.aicrawlers.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.company.aicrawlers.entity.CollectTask;

import java.util.List;
import java.util.Map;

/**
 * 采集任务 Service接口
 * 
 * @author AI Crawlers
 * @since 2025-10-10
 */
public interface CollectTaskService extends IService<CollectTask> {

    /**
     * 创建采集任务
     * 包含：创建任务、配置平台、添加问句、创建执行状态矩阵
     * 
     * @param taskName 任务名称
     * @param platforms 平台列表
     * @param questionIds 问句ID列表
     * @param remark 备注
     * @return 任务ID
     */
    Long createTask(String taskName, List<String> platforms, List<Long> questionIds, String remark);

    /**
     * 分页查询任务列表
     * 
     * @param page 分页对象
     * @param taskStatus 任务状态（可选）
     * @return 分页结果
     */
    IPage<CollectTask> getPageList(Page<CollectTask> page, String taskStatus);

    /**
     * 获取任务详情（含问句列表和执行状态）
     * 
     * @param taskId 任务ID
     * @return 任务详情（含问句列表、平台列表等）
     */
    Map<String, Object> getTaskDetail(Long taskId);

    /**
     * 获取任务的未执行问句列表（断点续传核心）
     * 
     * @param taskId 任务ID
     * @return 未执行的问句×平台组合
     */
    Map<String, Object> getPendingQuestions(Long taskId);

    /**
     * 取消任务
     * 
     * @param taskId 任务ID
     */
    void cancelTask(Long taskId);

    /**
     * 删除任务（级联删除相关数据）
     * 
     * @param taskId 任务ID
     */
    void deleteTask(Long taskId);

    /**
     * 更新任务进度
     * 在上报结果时自动调用
     * 
     * @param taskId 任务ID
     */
    void updateTaskProgress(Long taskId);
}

